/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package siafi.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;

import net.sf.jasperreports.engine.JasperRunManager;

import siafi.bean.PersonaCentro;
import siafi.db.ConexionDB;
import siafi.db.TerceroDAO;
import siafi.util.Constantes;

/**
 * 
 * @author dgsi
 */
public class GenerarRecibo extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
	 * methods.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 *             if a servlet-specific error occurs
	 * @throws IOException
	 *             if an I/O error occurs
	 */
	protected void processRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");

		boolean datos = false;
		boolean codigob = false;
		// String vigencia = request.getParameter("vigencia");
		String documento = request.getParameter("documento");
		Map<String, String> recibos = null;
		String codigo = request.getParameter("codigo");
		String idu_documento = request.getParameter("idu_documento");
		if (idu_documento == null || "".equals(idu_documento)) {
			if (codigo != null && !"".equals(codigo)) {
				recibos = TerceroDAO.findByCodigoResumen(codigo);
				codigob = true;
			} else if (documento != null && !"".equals(documento)) {
				recibos = TerceroDAO.findByDocumentoResumen(documento);
			} else {
				documento = null;
				datos = true;
			}
			if (recibos != null && recibos.size() > 1) {

				PrintWriter out = response.getWriter();
				out.println("<html>");
				out.println(" <head>");
				out.println(" <link href=\"./css/coolblue.css\" rel=\"stylesheet\" type=\"text/css\"/>");
				out.println(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
				out.println("  <title>Recibos</title>");
				out.println("</head>");
				out.println("<body>");
				out.println("   <div align=\"center\" id=\"header\">");
				out.println(" <img src=\"./images/upn.jpg\"/>");
				out.println(" </div>");
				out.println(" <div align=\"center\" id=\"content\">");
				out.println(" <h1>Recibo de Matr&iacute;cula</h1>");
				out.println("<form action=\"/recibosSIAFI/GenerarRecibo\" method=\"post\">");
				out.println(" <table>");
				out.println("    <tr>");

				out.println("   <td colspan=\"2\">Seleccione el recibo que desea generar<td>");
				out.println("</tr>");
				out.println(" <tr>");
				out.println(" <td><label>Recibo: </label></td>");
				out.println(" <td> <select name=\"idu_documento\">");

				for (Entry<String, String> entry : recibos.entrySet()) {
					out.println("  <option value=\"" + entry.getKey() + "\">"
							+ entry.getValue() + "</option> ");
				}

				out.println("</td>");
				out.println("</tr>");
				out.println(" <tr>");
				out.println(" <td colspan=\"2\"><button type=\"submit\">Generar</button></td>");
				out.println("</tr>");
				out.println("</table>");
				out.println("</form>");
				out.println("</div>");
				out.println(" <div align=\"right\" id=\"footer\" style=\"width: 80%\">");
				out.println("<img src=\"./images/SiafiReportes.bmp\" width=\"100px\" height=\"30px\"/>");
				out.println("</div>");

				out.println("</body>");
				out.println("</html>");

				out.close();

			} else if (recibos == null || recibos.size() < 1) {

				PrintWriter out = response.getWriter();
				out.println("<html>");
				out.println(" <head>");
				out.println(" <link href=\"./css/coolblue.css\" rel=\"stylesheet\" type=\"text/css\"/>");
				out.println(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
				out.println("  <title>Recibos</title>");
				out.println("</head>");
				out.println("<body>");
				out.println("   <div align=\"center\" id=\"header\">");
				out.println(" <img src=\"./images/upn.jpg\"/>");
				out.println(" </div>");
				out.println(" <div align=\"center\" id=\"content\">");
				out.println(" <h1>Recibo de Matr&iacute;cula</h1>");
				out.println("<form action=\"/recibosSIAFI/GenerarRecibo\" method=\"post\">");
				out.println(" <table>");
				out.println("    <tr>");
				if (!datos)
					out.println("   <td colspan=\"2\">No se encontró un recibo con esos datos<td>");
				else
					out.println("   <td colspan=\"2\">Debe ingresar el código o el documento<td>");
				out.println("</tr>");
				out.println("<tr>");
				out.println("   <td><label>N&uacute;mero de Documento</label></td>");
				out.println("  <td><input type=\"text\" size=\"30\" id=\"documento\" name=\"documento\"/></td>");
				out.println(" </tr>");
				out.println(" <tr>");
				out.println("<td><label>C&oacute;digo</label></td>");
				out.println(" <td><input type=\"text\" size=\"30\" id=\"codigo\" name=\"codigo\"/></td>");
				out.println("</tr>");

				out.println(" <tr>");
				out.println(" <td colspan=\"2\"><button type=\"submit\">Generar</button></td>");
				out.println("</tr>");
				out.println("</table>");
				out.println("</form>");
				out.println("</div>");
				out.println(" <div align=\"right\" id=\"footer\" style=\"width: 80%\">");
				out.println("<img src=\"./images/SiafiReportes.bmp\" width=\"100px\" height=\"30px\"/>");
				out.println("</div>");

				out.println("</body>");
				out.println("</html>");

				out.close();

			} else {
				Connection conexion = null;
				try {
					
					conexion = ConexionDB.getInstance().getConnection();
					File reportFile = null;
					Map parameters = new HashMap();

					idu_documento = (String) recibos.keySet().iterator().next();

					/* Establecemos la ruta del reporte */
					reportFile = new File(
							request.getRealPath("recibos/RECIBOMatri.jasper"));

					/*
					 * No enviamos parámetros porque nuestro reporte no los
					 * necesita asi que escriba cualquier cadena de texto ya que
					 * solo seguiremos el formato del método runReportToPdf
					 */
					parameters.put("IDU_DOCUMENTO", idu_documento);
					// parameters.put("DOC_ESTUDIANTE", documento);
					// parameters.put("SEMESTRE", vigencia);

					/*
					 * Enviamos la ruta del reporte, los parámetros y la
					 * conexión(objeto Connection)
					 */
					byte[] bytes = JasperRunManager.runReportToPdf(
							reportFile.getPath(), parameters, conexion);
					try {
						conexion.close();
					} catch (SQLException e) {
						for (StackTraceElement elem : e.getStackTrace()) {
							System.out.println(e.getMessage());
						}
					}
					/* Indicamos que la respuesta va a ser en formato PDF */
					response.setContentType("application/pdf");
					response.setContentLength(bytes.length);
					ServletOutputStream ouputStream = response
							.getOutputStream();
					ouputStream.write(bytes, 0, bytes.length);

					/* Limpiamos y cerramos flujos de salida */
					ouputStream.flush();
				} catch (Exception e) {
					e.printStackTrace();
					for (StackTraceElement elem : e.getStackTrace()) {
						System.out.println(e.getMessage());
					}
				}
				finally {
					try {
						conexion.close();
					} catch (SQLException e) {
						e.printStackTrace();
						for (StackTraceElement elem : e.getStackTrace()) {
							System.out.println(e.getMessage());
						}
					}
				}
			}
		} else {
			Connection conexion = null;
			try {
				
				conexion = ConexionDB.getInstance().getConnection();
				File reportFile = null;
				Map parameters = new HashMap();

				/* Establecemos la ruta del reporte */
				reportFile = new File(
						request.getRealPath("recibos/RECIBOMatri.jasper"));

				/*
				 * No enviamos parámetros porque nuestro reporte no los
				 * necesita asi que escriba cualquier cadena de texto ya que
				 * solo seguiremos el formato del método runReportToPdf
				 */
				parameters.put("IDU_DOCUMENTO", idu_documento);
				// parameters.put("DOC_ESTUDIANTE", documento);
				// parameters.put("SEMESTRE", vigencia);

				/*
				 * Enviamos la ruta del reporte, los parámetros y la
				 * conexión(objeto Connection)
				 */
				byte[] bytes = JasperRunManager.runReportToPdf(
						reportFile.getPath(), parameters, conexion);
				try {
					conexion.close();
				} catch (SQLException e) {
					for (StackTraceElement elem : e.getStackTrace()) {
						System.out.println(e.getMessage());
					}
				}
				/* Indicamos que la respuesta va a ser en formato PDF */
				response.setContentType("application/pdf");
				response.setContentLength(bytes.length);
				ServletOutputStream ouputStream = response.getOutputStream();
				ouputStream.write(bytes, 0, bytes.length);

				/* Limpiamos y cerramos flujos de salida */
				ouputStream.flush();
			} catch (Exception e) {
				e.printStackTrace();
				for (StackTraceElement elem : e.getStackTrace()) {
					System.out.println(e.getMessage());
				}
			}
			finally {
				try {
					conexion.close();
				} catch (SQLException e) {
					e.printStackTrace();
					for (StackTraceElement elem : e.getStackTrace()) {
						System.out.println(e.getMessage());
					}
				}
			}
		}

	}

	// <editor-fold defaultstate="collapsed"
	// desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
	/**
	 * Handles the HTTP <code>GET</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 *             if a servlet-specific error occurs
	 * @throws IOException
	 *             if an I/O error occurs
	 */
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * Handles the HTTP <code>POST</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 *             if a servlet-specific error occurs
	 * @throws IOException
	 *             if an I/O error occurs
	 */
	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * Returns a short description of the servlet.
	 * 
	 * @return a String containing servlet description
	 */
	@Override
	public String getServletInfo() {
		return "Servlet que genera el recibo de matricula";
	}// </editor-fold>

}
